package org.example;

/**
 * @author 甜圆
 * @version v1.0.1
 * @date 2025/9/23 19:35
 * @package org.example
 * @copyright 甜圆
 */
// 父类：动物
class Animal {
    // 父类的方法
    public void bark() {
        System.out.println("动物叫");
    }
}

// 子类：狗
class Dog extends Animal {
    // 重写父类方法
    @Override
    public void bark() {
        System.out.println("汪汪叫");
    }

    // 子类特有的方法
    public void wagTail() {
        System.out.println("摇尾巴");
    }
}

public class PolymorphismDemo {
    public static void main(String[] args) {
        // 左边是父类类型，右边是子类对象（多态写法）
        Animal animal = new Dog();

        // 1. 调用双方都有的方法
        animal.bark();
        // 编译时：检查Animal类有没有bark()方法（有，编译通过）
        // 运行时：执行Dog类重写后的bark()方法（输出"汪汪叫"）

        // 2. 尝试调用子类特有的方法
        // animal.wagTail();  // 编译报错！
        // 编译时：检查Animal类有没有wagTail()方法（没有，编译失败）
        // 即使右边的Dog有这个方法，左边的Animal没有，也不能调用
    }
}
